import importlib
import os
import configparser
import subprocess

# 当前执行的任务
tasks = {}
eval_tasks = {}
sys_config = {}
selects = {}
# 定时任务
jobs: dict[str, dict] = {}

# 当前调度器状态
job_trigger = False

def refresh_config():
    global sys_config
    try:
        # 系统配置
        config = configparser.ConfigParser()
        files = config.read(os.path.dirname(os.path.abspath(__file__)) + '/config.properties')
        if not files:
            raise ValueError('配置文件读取失败！')
        sys_config = config['sys']
    except Exception as e:
        print('配置读取失败！！！' + set(e))
        sys_config = {}


def get_config(key, default=None):
    '''
    获取配置
    :param key:
    :param default:
    :return:
    '''
    return sys_config.get(key, default)


refresh_config()


def refresh_code():
    '''
        根据依赖关系依次刷新模块已达到不重启更新代码的能力
        :return:
        '''

    # 执行git指令更新本地代码文件
    path = os.path.dirname(os.path.abspath(__file__))
    os.chdir(path)
    # pull latest code from your repository
    status = os.system("git pull origin master")
    # 检查状态码，如果非0，则抛出异常
    if status != 0:
        raise ValueError('代码更新异常，请check！')

    # 刷新配置
    refresh_config()

    module = importlib.import_module('util')
    importlib.reload(module)

    module = importlib.import_module('script')
    importlib.reload(module)

    module = importlib.import_module('script.common_storage')
    importlib.reload(module)

    module = importlib.import_module('script.common_client')
    importlib.reload(module)

    module = importlib.import_module('script.task_runner')
    importlib.reload(module)

    module = importlib.import_module('script.pe_copilot')
    importlib.reload(module)

    # 重新刷新脚本
    importlib.import_module('script').refresh_scripts()

    module = importlib.import_module('job')
    importlib.reload(module)

    # 重新刷新任务
    importlib.import_module('job').refresh_jobs()
